#include <stdio.h>
#include <stdlib.h>

#include "COMMON.h"
#include "SPI.h"


#ifndef _AD9508_H_
#define _AD9508_H_

#define AD9508_REG_NUM  28


typedef struct _AD9508_Config{

    int reg_num;

    uint32_t *reg_addr;
    uint32_t *reg_data;
    uint32_t *reg_data_default;

} AD9508_Config;


int init_ad9508_config( AD9508_Config *cfg );
int read_ad9508_config( AD9508_Config *cfg, char *cfg_ini, char *section );
int free_ad9508_config( AD9508_Config *cfg );

int print_ad9508_config( AD9508_Config *cfg );
int update_ad9508_config( AD9508_Config *cfg );
int config_ad9508_via_SPI(  uint32_t *gpio_reg,
                            uint32_t *gpio2_reg,
                            uint32_t *gpio_in_reg,
                            SPI_CONFIG *spi_config,
                            AD9508_Config *cfg );

int config_a_ad9508_reg_via_SPI(uint32_t *gpio_reg,
                                uint32_t *gpio2_reg,
                                uint32_t *gpio_in_reg,
                                SPI_CONFIG *spi_config,
                                AD9508_Config *cfg,
                                char *reg_addr,
                                uint32_t reg_data );

int read_a_ad9508_reg_via_SPI(  uint32_t *gpio_reg,
                                uint32_t *gpio2_reg,
                                uint32_t *gpio_in_reg,
                                SPI_CONFIG *spi_config,
                                AD9508_Config *cfg,
                                uint32_t reg_addr );

/*
    AXI接口的bits上电后默认为0，在top中
        assign RESET_AD9508 = ~GPIO_RESET_9508;
        assign SYNC_AD9508  = ~GPIO_SYNC_9508;
    因此上电后RESET与SYNC都默认拉高
*/
void reset_ad9508( uint32_t *gpio_reg );
void sync_ad9508( uint32_t *gpio_reg );

#endif // _AD9508_H_
